def toHex(self, num: int) -> str:
    if num == 0: return "0"
    hexChars = '0123456789abcdef'
    res = ""
    # 模拟 32 位整数
    """
    python 实际上是没有 32 位整数类型的，所以这里通过 8 次遍历，然后每次遍历处理 4 个二进制位，从而实现模拟 32 位的整数
    既然遍历的 8 次，每次得到一个十六进制位，那么 res 中肯定会有 8 个十六进制位，这 8 个十六进制位中前几位很有可能是 0，
    比如，输入整数是 10 的时候，那么得到的十六进制是 0000000a
    但是题目规定不能有前导 0，所以需要删除前导 0
    """
    for i in range(8):
        res = hexChars[(num & 15)] + res
        num >>= 4
    return res.lstrip('0') # 删除前导 0


# 第二种实现方法
def toHex(self, num: int) -> str:
    if num == 0: return "0"
    hexChars = '0123456789abcdef'
    res = ""
    # 将 num 转成 32 位无符号整数
    """
    比如 -5 ，你如果使用 bin(-5) 打印二进制的话，得到了 -0b101
    但是它在计算机中是以补码的方式存储，它的补码是 5 的原码取反再加 1 
    假设 5 的 32 位二进制是 00000000 00000000 0000000 00000101
    取反得到 11111111 11111111 11111111 111111010
    然后再加 1 得到：11111111 11111111 11111111 111111011
    11111111 11111111 11111111 111111011 这个是 -5 在计算机中的补码，也就是在计算机中存储的样子
    然后可以通过和  0xFFFFFFFF 来取与的方式，消除负数，最终就得到正数的 11111111 11111111 11111111 111111011
    """
    num = (num & 0xFFFFFFFF)
    while num != 0:
        res = hexChars[(num & 15)] + res
        num >>= 4
    return res